//定义返回 null 的函数⭐
// 显式标注返回值类型为 null
function returnNull(): null{
return null
}
// 调用示例
const result=returnNull()
console.log('result:',result);
//定义空数组
//方式 1：明确元素类型
const numbers: number[]=[]
numbers.push(22)

const strings: Array<string>=[]
strings.push('hi')
//方式 2：使用联合类型（允许多种类型元素）
const mixedArray: (number | string)[]=[]
mixedArray.push(1)
mixedArray.push('hello')
let a: number=3
//方式 3：使用 any（不推荐，失去类型安全）
// const anyArray: any[]=[]
// anyArray.push({})
//结合泛型定义空数组（高级用法）
function createEmptyArray<T>(): T[]{
return []
}
const numberArray=createEmptyArray<number>()
numberArray.push(6)
const objectArray=createEmptyArray<{id:number}>()
objectArray.push({id:1})
function noReturn(arg: number){
console.log('6789');

}
noReturn(555)
//接口
interface IPerson{
name:string,
age:number,
say(): void
}
let p1: IPerson={
    name:'zhangsan',
    age:33,
    say(){}
}


function kong1(): any{
    return null
    }
//泛型
  
        function identity<T>(value: T): T{
            return value
        }
        console.log('返回null',identity(null));
        console.log('返回string',identity<string>('hello'));
        console.log('自动推断返回类型',identity(7));
  function empty<T>(value: T): null{
    return null
  }      
  console.log('返回null',empty(3));
  //处理数组
  function firstElement<T>(arg: T[]): T | undefined{
    return arg[0]
  }
  console.log('返回数组的第一个元素',firstElement([undefined,2,3]),'---------',firstElement(['my','name']));
  //泛型接口
  interface Result<T>{
    data:T | null,
    error: string |null
  }
  type User={name: string,age: number}
const userResult: Result<User>={data:{  name:'zhangsan',age:33,}, error: null}
//泛型类
class Animal{
    name: string
    constructor(value: string){
this.name=value
    }
    eat<T>(value: T): T{
        return value
     }
}
//泛型类
  class Stack<T>{
private elements: T[]=[]
push(element: T){
  this.elements.push(element)  
}
pop(): T | undefined{
return this.elements.pop()
}
  }
const numberStack=new Stack<number>()
numberStack.push(42)
numberStack.push(82)
numberStack.pop()
console.log('numberStack',numberStack);
//泛型约束  通过 extends 约束类型范围：
  interface HasLength {
length:number
  }   
  function LogLength<T extends HasLength>(arg: T): void{
console.log('长度为',arg.length);

  }   
  LogLength('hello')
